/**
 * <p>Title: UserSvc</p>
 * <p>Description: The Interface of User Svc</p>
  * <p>Copyright: Shanghai Batchsight Pharmaceutical Technologies, Inc. Copyright(c) 2016</p>
 * @author Zuo Yefeng
 * @version 1.0
 * <pre>Histroy:
 *       2016-9-14  Zuo Yefeng  Create
 *</pre>
*/
package cn.jhg.account.service;

import java.util.List;

import cn.jhg.account.entity.User;
import cn.jhg.account.entity.UserStatus;
import cn.jhg.account.util.ServiceResult;

public interface UserSvc {
	
	/**
	 * 按 ID 获取用户
	 * @param uid	User ID
	 * @param iuid	调用者 id
	 * @return User Object
	 */
	//@AuthorityDefine(auth=1)
	public ServiceResult<User> getUserById(int uid, int iuid);

	/**
	 * 按帐户名获取用户
	 * @param account	account name
	 * @param iuid	调用者 id
	 * @return User Object
	 */
	public ServiceResult<User> getUserByAccount(String account, int iuid);

	/**
	 * 按用户名字查找用户（模糊查询），eg: 输入“张三”返回所有名字中带有“张三”的用户
	 * @param condition	用户名
	 * @param iuid	调用者 id
	 * @return A set of User Object
	 */
	public ServiceResult<List<Integer>> findUserByName(String condition, int iuid);

	/**
	 * 按条件查找用户
	 * @param account	用户账号（允许部分匹配），等于空查找全部
	 * @param name		用户名（允许部分匹配），等于空查找全部
	 * @param status	用户状态，等于空查找全部
	 * @param iuid			调用者 id
	 * @return	ErrorCode, 用户 id set
	 */
	public ServiceResult<List<Integer>> findUser(String account, String name, UserStatus[] status, int iuid);
	// account like %#{account}% and name like %#{name}% and (status&8)>0 and (status&16)=0
	// -- status&8 > 0  判断是否锁定
	// -- status&16 = 0 判断是否未失效
	/**
	 * 按条件查找用户
	 * @param account	用户账号（允许部分匹配），等于空查找全部
	 * @param name		用户名（允许部分匹配），等于空查找全部
	 * @param status	用户状态，等于空查找全部
	 * @param iuid			调用者 id
	 * @return	ErrorCode, 用户 id set
	 */
	public ServiceResult<List<User>> findUsers(String account, String name, UserStatus[] status, int iuid);
	// account like %#{account}% and name like %#{name}% and (status&8)>0 and (status&16)=0
	// -- status&8 > 0  判断是否锁定
	// -- status&16 = 0 判断是否未失效
	
	/**
	 * 增加用户
	 * @param user	User Object
	 * @param iuid	调用者 id
	 * @param sid   签名 id（操作前用户确认签名记录的 id）
	 * @return Error Code
	 */
	public ServiceResult<Integer> addUser(User user, int sid, int iuid);

	/**
	 * 更新用户
	 * @param user	User Object
	 * @param iuid	调用者 id
	 * @param sid   签名 id（操作前用户确认签名记录的 id）
	 * @return	Error Code
	 */
	public ServiceResult<Integer> updateUser(User user, int sid, int iuid);

	/**
	 * 失效用户
	 * @param uid	User Id
	 * @param iuid	调用者 id
	 * @param sid   签名 id（操作前用户确认签名记录的 id）
	 * @return	Error Code
	 */
	public ServiceResult<Integer> invalidateUser(int uid, int sid, int iuid);

	/**
	 * 获取所属用户组
	 * @param uid	User Id
	 * @param iuid	调用者 id
	 * @return	A set of User Group Id which the user belongs to.
	 */
	public ServiceResult<List<Integer>> getUserGroup(int uid, int iuid);
	/**
	 * 按条件查找用户 不在固定用户组
	 * @param ugid	用户组id
	 * @param iuid			调用者 id
	 * @return	ErrorCode, 用户 id set
	 */
	public ServiceResult<List<User>> findUserExist(int ugid,int iuid);
	
}
